/**
 * @file    var_mng.h
 * @brief   系统变量管理
 * @author  Liuwei
 * @version 1.0.1
 * @date    2023-04-19
 * 
 * @copyright Copyright (c) 2023 JBD-Energy Storage Technology Co. LTD
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version   <th>Author   <th>Description
 * <tr><td>2023-04-19 <td>1.0.1     <td>Liuwei   <td>首次创建
 * </table>
 */
#ifndef __VAR_MNG_H_
#define __VAR_MNG_H_

/* file includes -------------------------------------------------------------*/
#include <stdint.h>

/* Cplusplus -----------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif

/* macro/define/typedef ------------------------------------------------------*/
#define VAR_CURR_FACTOR    (0.01f)
#define VAR_CURR_OFFSET    (300)

#define VAR_MOS_ST_DSG     (1)
#define VAR_MOS_ST_CHG     (0)

/* 用户控制明林 */
#define VAR_USE_CMD_RESET      (0x5AA0)
#define VAR_USE_CMD_SHUTDOWN   (0x5AA1)
#define VAR_USE_CMD_WAIT_SLEEP (0x5AA2)
#define VAR_USE_CMD_ALL_CHG    (0x5AA3)
#define VAR_USE_CMD_ALL_DSG    (0x5AA4)
#define VAR_USE_CMD_DSG        (0x5AA5)
#define VAR_USE_CMD_CHG        (0x5AA6)

#define TOOL_MODE_DEBUG        (0x5A01)
#define TOOL_MODE_DVDP         (0x5A02)
#define CALIB_CMD_EN           (0x5533)

#define CMD_DEEP_SLEEP         (0xA502)
#define CMD_STANDBY_SLEEP      (0xA501)
#define CMD_LOW_SLEEP          (0xA503)
#define USE_CMD_UPDATE         (0xAA11)
#define USE_CMD_RESET          (0xAA33)

#define REMOTE_CMD_SLEEP       (0xA5A5)

enum
{
    /* @attention : 注释[x , y],x表示倍数系数 , y表示偏移量 ,实际值 = 数据 * x + y */
    VAR_ID_SRC_SMP_BVOLT ,  /*!<(000)采集总压原始值 [0.01 , 0]V */
    VAR_ID_SRC_SMP_PVOLT ,  /*!<(001)采集PACK原始值 [0.01 , 0]V */
    VAR_ID_SRC_CURR      ,  /*!<(002)电流采集值 [0.01,-300]A*/
    VAR_ID_SRC_HV_VOLT   ,  /*!<(003)硬件版本电压值 [1 , 0]mV*/
    VAR_ID_SRC_SYS_POW   ,  /*!<(004)系统电源 [1 , 0]mV]*/
    VAR_ID_SRC_AFE_ALM   ,  /*!<(005)AFE告警信息 [1 , 0]*/
    VAR_ID_BATT_VOLT     ,  /*!<(006)总电压 [0.01 , 0]V*/
    VAR_ID_PACK_VOLT     ,  /*!<(007)PACK包电压 [0.01 , 0]V*/
    VAR_ID_BUS_CURR      ,  /*!<(008)母线电流 [0.01,-300]A*/
    VAR_ID_MOS_TEMP      ,  /*!<(009)MOS温度 [0.1,-50]℃*/
    VAR_ID_ENV_TEMP      ,  /*!<(010)环境温度 [0.1,-50]℃*/
	VAR_ID_PCB_TEMP      ,  /*!<(011)PCB温度 [0.1,-50]℃*/
    VAR_ID_CELL_VOLT01   ,  /*!<(012~027)单体电压01 [1 , 0]mV */
    VAR_ID_CELL_TEMP01=28,  /*!<(028~035)电芯温度01 [0.1,-50]*/
	VAR_ID_MAX_CELL_SN=36,  /*!<(036)最高单体序号[1,0]*/
	VAR_ID_MAX_CELL_VOLT ,  /*!<(037)最高单体电压值[1,0]mV*/
    VAR_ID_MIN_CELL_SN   ,  /*!<(038)最低单体序号[1,0] */
	VAR_ID_MIN_CELL_VOLT ,  /*!<(039)最低单体电压值[1,0]mv */
	VAR_ID_MAX_TEMP_SN   ,  /*!<(040)最高温度序号[1,0] */
	VAR_ID_MAX_TEMP_VAL  ,  /*!<(041)最高温度值[0.1,-50]℃ */
    VAR_ID_MIN_TEMP_SN   ,  /*!<(042)最低温度序号[1,0] */
	VAR_ID_MIN_TEMP_VAL  ,  /*!<(043)最低温度值[0.1,-50]℃ */
    VAR_ID_ALM_MSG_H     ,  /*!<(044)告警信息-H*/
    VAR_ID_ALM_MSG_L     ,  /*!<(045)告警信息-L*/
    VAR_ID_PRP_MSG_H     ,  /*!<(046)保护信息-H*/
    VAR_ID_PRP_MSG_L     ,  /*!<(047)保护信息-L*/
    VAR_ID_MOS_STATE     ,  /*!<(048)MOS状态信息 [BIT0:DMOS BIT1:CMOS]*/
    VAR_ID_DISP_SOC      ,  /*!<(049)显示SOC[0.01,0]*/
    VAR_ID_DISP_RCAP     ,  /*!<(050)显示剩余容量[0.01,0]*/
	VAR_ID_RSOC          ,  /*!<(051)实际SOC[0.01,0]*/
    VAR_ID_REAL_CAP      ,  /*!<(052)实际剩余容量[0.01,0]*/
	VAR_ID_CURR_DR       ,  /*!<(053)电流方向[0:待机1:充电2:放电]*/
	VAR_ID_AGV_TEMP      ,  /*!<(054)平均温度[0.1,-50]℃*/
	VAR_ID_AGV_VOLT      ,  /*!<(055)平均电压[1,0]mV*/
	VAR_ID_VOLT_DIFF     ,  /*!<(056)最大压差[1,0]mV*/
	VAR_ID_TEMP_DIFF     ,  /*!<(057)最大温差[0.1,0]℃*/
    VAR_ID_CELL_OL_ST    ,  /*!<(058)单体在线状态[0:在线 1:离线]*/
    VAR_ID_TEMP_OL_ST    ,  /*!<(059)温度在线状态[0:在线 1:离线]*/
	VAR_ID_SOP_CC        ,  /*!<(060)SOP-充电电流 [1 , X10]*/
    VAR_ID_SOP_DC        ,  /*!<(061)SOP-放电电流 [1 , X10]*/
    VAR_ID_SOP_CV        ,  /*!<(062)SOP-充电电压 [1 , X10]*/
    VAR_ID_SOP_DV        ,  /*!<(063)SOP-放电电压 [1 , X10]*/
	VAR_ID_SIGN_STATUS   ,  /*!<(064)信号状态 */
	VAR_ID_ACC_CHG_AH_H  ,  /*!<(065)累计充电AH数[0.1,0]AH*/
	VAR_ID_ACC_CHG_AH_L  ,  /*!<(066)累计充电AH数*/
	VAR_ID_ACC_DSG_AH_H  ,  /*!<(067)累计放电AH数[0.1,0]AH*/
	VAR_ID_ACC_DSG_AH_L  ,  /*!<(068)累计放电AH数*/
    VAR_ID_CTRL_CMD      ,  /*!<(069)用户控制命令 */
    VAR_ID_TOOL_MODE     ,  /*!<(070)调试模式*/
    VAR_ID_CTRL_BLC      ,  /*!<(071)工装模式均衡输出状态 */
    VAR_ID_DEBUG_OUT     ,  /*!<(072)调试模式输出状态*/
	VAR_ID_HARD_VER      ,  /*!<(073)硬件版本 */
    VAR_ID_USE_CMD       ,  /*!<(074)用户控制命令 */
    VAR_ID_MOS_CTRL      ,  /*!<(075)调试模式输出状态*/
    VAR_ID_OUT_CTRL      ,  /*!<(076)调试模式输出状态*/
    VAR_ID_CTRL_SLEEP    ,  /*!<(077)调试模式输出状态*/
    VAR_ID_LED_SW        ,  /*!<(078)调试模式输出状态*/
    VAR_ID_CON_CHG_AH    ,  /*!<(079)持续充电AH */
    VAR_ID_CON_DSG_AH    ,  /*!<(080)持续放电AH */
    VAR_ID_BLC_NOW_IDX   ,  /*!<(081)当前均衡状态 */
    VAR_ID_SELF_ADDR     ,  /*!<(082)本机地址 */
	VAR_ID_ASK_FULL_CHG  ,  /*!<(083)请求满充标志位 */
	VAR_ID_CALIB_CMD     ,  /*!<(084)校准模式*/
	VAR_ID_MOS_LOCK      ,  /*!<(085)MOS锁死开关 */
    VAR_ID_PARAM_LOCK    ,  /*!<(086)参数锁 */
	VAR_ID_HEAT_STATE    ,  /*!<(087)加热状态 */
	VAR_ID_COMM_OFF_CNT  ,  /*!<(088)外部通信超时计时器 */
	VAR_ID_COMM_STATE    ,  /*!<(089)外部通信状态 */
	VAR_ID_REMOTE_CMD    ,  /*!<(089)远程控制命令 */
	VAR_ID_SW_ADDR       ,  /*!<(090)软件编码地址 */
	VAR_ID_FAULT_CLEAR_CNT   ,  /*!<(091)故障清除计时 */
	VAR_ID_FAULT_CLEAR_STATE ,  /*!<(092)故障清除状态 */
    
    VAR_ID_TP_VOLT  = 200,  /*!<(200)统计信息总电压[0.01,0]V*/
    VAR_ID_TP_CURR_H     ,  /*!<(201)统计信息总电流*/
    VAR_ID_TP_CURR_L     ,  /*!<(202)统计信息总电流-L*/
    VAR_ID_TP_RUN_STATE  ,  /*!<(203)系统状态[0:待机 1:充电 2:放电]*/
    VAR_ID_TP_ALM_MSG_H  ,  /*!<(204)告警信息-高16位*/
    VAR_ID_TP_ALM_MSG_L  ,  /*!<(205)告警信息-低16位 */
    VAR_ID_TP_PRP_MSG_H  ,  /*!<(206)保护信息-高16位 */
    VAR_ID_TP_PRP_MSG_L  ,  /*!<(207)保护信息-高16位 */
    VAR_ID_TP_SOC        ,  /*!<(208)SOC [0.01,0]%*/
    VAR_ID_TP_SOP_CC     ,  /*!<(209)最大允许充电电流 [0.1,0]A*/
    VAR_ID_TP_SOP_DC     ,  /*!<(210)最大允许放电电流 [0.1,0]A*/
    VAR_ID_TP_SOP_CV     ,  /*!<(211)最大允许充电电压 [0.1,0]V*/
    VAR_ID_TP_SOP_DV     ,  /*!<(212)最低允许放电电压 [0.1,0]V*/
    VAR_ID_TP_PACK_OL_ST ,  /*!<(213)电池组在线状态 */
    VAR_ID_TP_POL_NUM    ,  /*!<(214)电池组在线数量 */
    VAR_ID_TP_REAL_CAP   ,  /*!<(215)剩余容量 [0.1 ,0]Ah*/
    VAR_ID_TP_FULL_CAP   ,  /*!<(216)标称总容量 [0.1 ,0]Ah*/
    VAR_ID_TP_MAXC_SN    ,  /*!<(217)最高单体电压序号 h8-组 l8-序号 */
    VAR_ID_TP_MAXC_VOLT  ,  /*!<(218)最高单体电压值[1 ,0]mV*/
    VAR_ID_TP_MINC_SN    ,  /*!<(219)最低单体序号 h8-组 l8-序号 */
    VAR_ID_TP_MINC_VOLT  ,  /*!<(220)最低单体电压值[1 ,0]mV */
    VAR_ID_TP_MAXT_SN    ,  /*!<(221)最高温度信息 h8-组 l8-序号 */
    VAR_ID_TP_MAXT_VAL   ,  /*!<(222)最高温度值  [0.1,-50]℃ */
    VAR_ID_TP_MINT_SN    ,  /*!<(223)最低温度信息 h8-组 l8-序号 */
    VAR_ID_TP_MINT_VAL   ,  /*!<(224)满充总容量  [0.1,-50]℃ */
    VAR_ID_TP_SOH        ,  /*!<(225)*/ 
    VAR_ID_TP_AVG_CV01   ,  /*!< 226 平均电压*/
    VAR_ID_TP_AVG_CT01 = 241   ,  /*!<22 平均温度*/
    VAR_ID_TP_AVG_BV     ,  /* 平均总压 */
    VAR_ID_TP_CYCLE      ,  
    VAR_ID_TP_MAX_CYCLE  ,
    VAR_ID_TP_MIN_SOH    , 
    VAR_ID_TP_AVG_TEMP   ,
    VAR_ID_TP_AVG_MOST   ,    
    VAR_ID_TP_MAX_MOST_SN ,  /*!<(221)最高温度信息 h8-组 l8-序号 */
    VAR_ID_TP_MAX_MOST_VAL   ,  /*!<(222)最高温度值  [0.1,-50]℃ */
    VAR_ID_TP_MIN_MOST_SN    ,  /*!<(223)最低温度信息 h8-组 l8-序号 */
    VAR_ID_TP_MIN_MOST_VAL   ,  /*!<(224)满充总容量  [0.1,-50]℃ */
    VAR_ID_TP_AVG_ENVT   , 
    VAR_ID_TP_MAX_ENVT_SN ,  /*!<(221)最高温度信息 h8-组 l8-序号 */
    VAR_ID_TP_MAX_ENVT_VAL,  /*!<(222)最高温度值  [0.1,-50]℃ */
    VAR_ID_TP_MIN_ENVT_SN ,  /*!<(223)最低温度信息 h8-组 l8-序号 */
    VAR_ID_TP_MIN_ENVT_VAL ,  /*!<(224)满充总容量  [0.1,-50]℃ */
    
    VAR_ID_PACK01_VOLT = 300  ,  /*!<(092)PACK01 总电压*/
    VAR_ID_PACK01_CURR   ,  /*!<(093)PACK01 总电流*/
    VAR_ID_PACK01_CURR_ST,  /*!<(094)PACK01 电流方向 */
    VAR_ID_PACK01_SOC    ,  /*!<(095)PACK01 SOC */
    VAR_ID_PACK01_MOS    ,  /*!<(096)MOS状态 */
    VAR_ID_PACK01_MIN_T  ,  /*!<(097)最低温度 */
    VAR_ID_PACK01_MAX_T  ,  /*!<(098)最高温度 */
    VAR_ID_PACK01_MIN_V  ,  /*!<(099)最低电压*/
    VAR_ID_PACK01_MAX_V  ,  /*!<(100)最高电压*/
    VAR_ID_PACK01_RSD    ,  /*!<(101)预留*/
    
    /* PACK02~PACK15 ()*/
	VAR_ID_MAX = 512  , 
};

/* variables -----------------------------------------------------------------*/

/*******************************************************************************
 * public API List
 ******************************************************************************/
void var_init(void);
uint8_t var_set_data(uint16_t var_id , uint16_t set_val);
uint16_t var_get_data(uint16_t var_id);

/*! @} End of Interface API List */

#ifdef __cplusplus
}
#endif

#endif  /* #ifndef __VAR_MNG_H_ */
/********** Copyright (c) 2023 JBD-Energy Storage Technology Co. LTD *********/
